草庐IT

Swift 枚举评估

全部标签

c++ - 与常规枚举相比,C++ 枚举结构的大小是否更大?

与常规枚举相比,C++枚举结构(类)的大小是否更大?即,假设它们枚举相同的确切数据,什么会转化为更多字节的指令代码?我正在嵌入式环境中开发,这个问题很重要。我喜欢使用枚举结构允许的类型安全和作用域,但不会以代码膨胀为代价。 最佳答案 没有。语义上的差异由编译器管理,因为它只与类型系统有关。没有理由需要更多存储空间或需要更多说明。您可以使用sizeof轻松检查您的实际类型。但是,我应该注意,C++不保证任何此类类型的布局,只是说共享相同底层类型的两个枚举类型是“布局兼容的”([C++14:7.2/9]).

c++ - 表达式中使用的枚举数是否与其枚举的基础类型具有相同的类型?

当在无范围枚举定义之外使用时,枚举常量的类型是什么?考虑以下代码:#includeenummodes{begin=0,end=1};intmain(){std::cout::type>::value这在我的机器上产生:true4-99现在,如果我只将其他一些枚举器的值从begin更改为2147483648,那么我的输出将变为:true44294967197显然,这意味着end的类型已经从int变成了unsignedint,甚至底层的modes仍然相同(即unsignedint)。关于枚举的积分提升是否有一些特殊规则? 最佳答案 来自

c++ - 为枚举赋值

在审查一些旧代码时,我注意到以下两个使用枚举的奇怪结构(两个不同的文件/类/命名空间,只是在这里将它们放在一起):enumFirstEnum{A_CHOICE,ANOTHER_CHOICE=1,YET_SOME_OTHER_CHOICE};enumSecondEnum{FIRST_CHOICE,SECOND_CHOICE,THIRD_CHOICE,DEFAULT_CHOICE=SECOND_CHOICE};我认为这两种结构都是错误的。第一个为其中一个选项赋值,但不为其他选项赋值,这意味着如果添加新选项,事情可能会出错。在第二种情况下,我们最终得到两个具有相同基础值的枚举元素。C++标准

c++ - 为什么 C++ 允许通过指针访问枚举?

我正在编写一些代码,其中类中有一个简单的枚举。另一段代码有一个指向该类的指针,并通过箭头指针访问枚举的值。这个类究竟是如何能够以这种方式访问​​MY_VALUE1的?我虽然它只允许通过MyClass::MY_VALUE1或MyClass::MyEnum::MY_VALUE1访问。classMyClass{public:enumMyEnum{MY_VALUE0=0,MY_VALUE1=1};//getters,settersasappropriate};//OtherclassMyClass*myClass=newMyClass();//CompileswithoutC++11if(ge

C++ 捕获枚举值作为异常

我正在尝试使用一个外部C++库,该库已将其异常定义为:enumMY_ERRORS{ERR_NONE=0,ERR_T1,ERR_T2,};然后在代码中抛出异常是这样的:if(...){throwERR_T1;作为C++编程的新手,我会做类似的事情:try{call_to_external_library();}catch(???err){printf("Anerroroccurred:%s\n",err);}catch(...){printf("Anunexpectedexceptionoccurred.\n");}我如何确定抛出的是什么? 最佳答案

c++ - 在 C 枚举错误中使用单词 "SING"到 "expected an identifier"

在头文件中我有以下枚举:namespaceOBJ_VERBS{enum{zero,CUDDLE,EMBRACE,FLIP,GROPE,HUG,KISS,LICK,NUDGE,PAT,PINCH,POKE,PULL,RUB,SHAKE,SQUEEZE,TAP,TUG,TURN,WAVE,PEER,PET,CLENCH,CURSE,NUZZLE,SNAP,STROKE,TWIRL,LEAN,GRIP,SMELL,GRUNT,SQUEAL,SCOLD,GAZE,WIND,SPIT,SPIN,DANCE,SING,zTOTAL};constint_MAX_=int(OBJ_VERBS::zTO

c++ - 应用关于如何递增枚举的规则

有没有办法改变枚举设置其常量值的方式?通常它会递增一个,但我想应用另一个规则。在PAWN中这会起作用enum(有没有办法在C++中做到这一点? 最佳答案 不是自动的,但是你可以手动指定每个值enumX{a=0x01,b=0x02,c=0x04}; 关于c++-应用关于如何递增枚举的规则,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/28808848/

c++ - 安全地将整数与强类型枚举进行比较

当整数值可能不在枚举值范围内时,如何安全地将未知类型的整数值与强类型枚举进行比较?将整数值与枚举进行比较的最明显方法是将整数值a转换为枚举类型E,然后与枚举值b,像这样:templateboolcompare(Ia,Eb){returnstatic_cast(a)==b;}但是,如果a不在枚举值范围内,这将导致未指定的行为,根据[expr.static.cast]/10:Avalueofintegralorenumerationtypecanbeexplicitlyconvertedtoanenumerationtype.Thevalueisunchangediftheoriginal

R中列表元素的懒惰评估

有没有办法懒惰地加载列表的元素?我有一个大数据列表。每个列表都需要很长时间才能生成和加载。通常,我不会在会话期间使用所有data.frames,因此希望它们在我使用时会生成和加载。我知道我可以使用delayedAssign要创建懒惰的变量,但这不能应用于列表元素。以下是不起作用的可再现示例:一些需要一段时间才能生成数据的功能。slow_fun_1方法1my_list方法2my_list_2看答案这是一种可能的解决方案。这不是懒惰的评估。但是它在需要时计算数据。帧(然后加缓存,因此仅第一次进行计算)。您可以使用软件包memoise为达到这个。例如slow_fun_1并注意my_list$df_1

Swift 3以编程方式绘制uiimage

我没有核心图形的经验,但是我需要画一个看起来像这样的动态uiimage:剩下所有的(实际上我希望灰色区域清晰。因此,红色看起来像是浮动的)这是我尝试的代码:publicextensionUIImage{publicconvenienceinit?(color:UIColor,size:CGSize=CGSize(width:27,height:5),isWhole:Bool=true){lettotalHeight:CGFloat=5.0lettopRectHeight:CGFloat=1.0//if(isWhole){lettopRect=CGRect(origin:.zero,size:C